'''
TODO 主流性能测试工具：
1、Loadrunner：工业级标准性能测试负载工具，可以模拟上万用户实施测试
             多用户 -万
             详细的分析报表 -秒
             支持IP欺骗功能
             （收费，很贵）
2、Jmeter：Apache组织开发，基于java的开源软件，对系统做功能测试和性能测试
              免费开源
              小巧
              丰富的学习资源和扩展组件
              （不支持IP欺骗、分析和报表能力相对于LR欠缺精度 -分钟）
3、相同：
      都能模拟大量用户
      都支持多协议（如：HTTP）
      都有监控及分析报表功能
TODO JMeter：
1、安装：
       JMeter - https://archive.apache.org/dist/jmeter/binaries/
       JDK    - http://www.oracle.com/
2、配置-环境变量：
              新建系统变量 - JMETER_HOME -> F:\apache-jmeter-5.3
                          JAVA_HOME   -> C:\Program Files\Java\jdk1.8.0_101
              path中添加： %JMETER_HOME%\lib\ext\ApacheJMeter_core.jar
                         %JMETER_HOME%\lib\jorphan.jar
                         %JAVA_HOME%\bin
                         %JAVA_HOME%\jre\bin
              乱码：jmeter.properties目录 - sampleresult.default.encoding=UTF-8
3、打开JMeter：
            方法一：JMeter安装目录下 - bin - 双击 jmeter.bat
            方法二：JMeter安装目录下 - bin - 双击 ApacheJMeter.jar (暂不可用）
            方法三：cmd中，java -jar ApacheJMeter.jar(暂不可用）
4、使用：
      ① 常用文件目录：
                  bin目录： 存放可执行文件和配置文件
                  docs目录：是JMeter的api文档，用于开发扩展组件
                  printable_docs目录：用户帮助手册  （file:///F:/apache-jmeter-5.3/printable_docs/usermanual/index.html）
                  lib目录：存放JMeter依赖的jar包和用户扩展所依赖的jar包
      ② 元件和组件介绍：     -  "测试计划" 目录下
            "线程组" 目录下：
                    取样器：    发送请求
                    逻辑控制器：控制语句的执行顺序
                    前置处理器：对请求参数进行预处理
                    后置处理器：对响应结果进行提取                           - 元件：多个类似功能组件的容器（类）
                    断言：     检查接口的返回结果是否与预期结果一致              组件：容器中实现独立的某个功能（方法）
                    定时器：   设置等待
                    测试片段： 封装一段代码，供其他脚本调用
                    配置元件： 测试数据的初始化配置
                    监听器：  查看JMeter脚本的运行结果
            场景中设置线程组：
                         模拟10个用户并行执行             线程数 - 10
                         模拟10个用户5s内启动完成         线程数 - 10    ramp-up时间 - 5s（用户启动时间）
                         模拟2个用户各循环3次             线程数 - 2     循环次数 - 3
                         模拟2个用户运行30s              线程数 - 2     循环 - 永远      持续时间 - 30s（用户启动之后需要运行多少时间）
                         模拟2个用户等待10s后开始执行      线程数 - 2     循环 - 永远      持续时间 - 30s  启动延迟 - 10s（需要等多久，脚本才开始运行）
                 -> 分析：
                        线程数代表虚拟用户数，用户数越多，负载越大
                        循环次数代表运行时间，次数越多，运行时间越长
            参数设置：
                    get请求： 路径 + 参数列表
                    post请求：参数列表 + 消息体数据
      ③ 接口自动化脚本的实现过程-元件：
            1、初始化测试数据                     1配置元件
            2、对请求参数化进行赋值                2前置处理器    - 3定时器
            3、调用get/post方法发送请求           4取样器
            4、提取响应中特定字段的值              5后置处理器
            5、对提取出来的值与预期结果进行对比      6断言
            6、在控制台查看脚本运行的结果           7监听器
      ④ 元件的作用域：靠测试计划的树形结构中元件的父子关系来确定
                    所有的组件都是以取样器为核心来运行的  （必须有取样器才会执行）
                       取样器：不和其他元件相互作用，没有作用域
                       逻辑控制器：只对子节点中的取样器、逻辑控制器起作用
                       其他元件：  父节点是取样器，则只对其父节点起作用
                                 父节点不是取样器，则对父节点下的其他所有后代节点（子节点、子节点的子节点）起作用
5、案例：使用JMeter访问百度首页接口，查看请求和响应信息
    步骤：
        启动 JMeter
        测试计划 - 线程组 - HTTP请求取样器（填写相关请求信息）
                       - 查看结果树监听器
        - 启动按钮运行，查看结果
'''
